

import time
import pyperclip
import pyautogui
import win32api
import win32con
from image_processing import ImageProcessing



# 创建恐龙页面上的坐标点
class CreateDinosaur(ImageProcessing):

    dinosaur_list = [
        "创建恐龙","恐龙仓库", "游戏商城", "充值", "开始游戏",
        "食肉恐龙",
            "高脊龙",
            "异特龙",
            "牛龙",
            "暴君龙",
            "棘背龙",
            "始盗龙",
            "霸王龙",
            "南方巨兽龙",
        "食草恐龙",
            "包头龙",
            "龙王龙",
            "剑龙",
            "三角龙",
            "豪勇龙",
           
        "返回"
    ]

    def __init__(self):
        super().__init__("CreateDinosaur")

        # { "按钮名称": (0, 0) }
        self.dinosaur_dict = dict.fromkeys(self.dinosaur_list, (0, 0))

        self.switch_page("创建恐龙")

        time.sleep(1)

        self.ocr_data = self.get_ocr_result()

    
    def get_ocr_result(self):

        self.screenshot()
        self.grayscale()
        result = self.ocr_recognition()

        return result[0]

    def get_coordinate(self):
        '''
        从 OCR 识别结果中提取文本的中心坐标点
        :return: 返回一个字典，键为文本内容，值为中心坐标点 (x, y)
        '''
        for i in self.ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            # print(i)
            ocr_text = i[1][0]  # 提取文本内容

            # print(f"OCR 识别结果: {ocr_text}")

            if ocr_text.find("返回")==0:

                ocr_text = "返回"

            if ocr_text not in self.dinosaur_list:  # 如果文本内容不在 dinosaur_list 中，跳过当前结果
                continue

            # similarity = i[1][1]  # 提取置信度

            # # 如果置信度低于 0.9，跳过当前结果
            # if similarity < 0.9:
            #     continue

            # 提取四个角的坐标点
            ocr_coordinates = i[0]

            # 计算中心坐标点
            x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
            y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标

            center_x = sum(x_coords) / 4  # 计算 x 中心点
            center_y = sum(y_coords) / 4  # 计算 y 中心点

            # 保存坐标点
            self.dinosaur_dict[ocr_text] = (center_x, center_y)


        # 已知的龙和它们的坐标 换算未知龙的坐标

        dragon_list_1 = ["高脊龙", "异特龙", "牛龙", "暴君龙", "棘背龙"]
        dragon1 = "异特龙"
        pos1 = self.dinosaur_dict[dragon1]
        dragon2 = "棘背龙"
        pos2 = self.dinosaur_dict[dragon2]

        # 计算所有龙的位置
        positions = CreateDinosaur.calculate_dragon_positions(dragon_list_1, dragon1, dragon2, pos1, pos2)

        self.dinosaur_dict.update(positions)

        dragon_list_2 = ["始盗龙", "霸王龙", "南方巨兽龙"]
        dragon1 = "始盗龙"
        pos1 = self.dinosaur_dict[dragon1]
        dragon2 = "南方巨兽龙"
        pos2 = self.dinosaur_dict[dragon2]

        # 计算所有龙的位置
        positions = CreateDinosaur.calculate_dragon_positions(dragon_list_2, dragon1, dragon2, pos1, pos2)

        self.dinosaur_dict.update(positions)

        self.dinosaur_dict["包头龙"] = self.dinosaur_dict["高脊龙"]
        self.dinosaur_dict["龙王龙"] = self.dinosaur_dict["异特龙"]
        self.dinosaur_dict["剑龙"] = self.dinosaur_dict["牛龙"]
        self.dinosaur_dict["三角龙"] = self.dinosaur_dict["暴君龙"]
        self.dinosaur_dict["豪勇龙"] = self.dinosaur_dict["棘背龙"]

        # 输出结果

        print(f"坐标点获取成功: {self.dinosaur_dict}")


        return self.dinosaur_dict

    @staticmethod
    def calculate_dragon_positions(dragons, dragon1, dragon2, pos1, pos2):
        """
        根据已知的两条龙的坐标，推断出其他龙的位置。
        假设所有龙在同一水平线上（y 坐标相同）。
        
        :param dragons: 所有龙的列表，按顺序排列。
        :param dragon1: 已知的第一条龙的名称。
        :param dragon2: 已知的第二条龙的名称。
        :param pos1: 第一条龙的坐标 (x, y)。
        :param pos2: 第二条龙的坐标 (x, y)。
        :return: 返回一个字典，包含所有龙的名称及其坐标。
        """
        # 找到已知龙在列表中的索引
        index1 = dragons.index(dragon1)
        index2 = dragons.index(dragon2)
        
        # 计算两条龙之间的 x 方向距离
        dx = pos2[0] - pos1[0]
        
        # 计算每条龙之间的 x 方向间距
        spacing_x = dx / (index2 - index1)
        
        # 初始化结果字典
        positions = {}
        
        # 遍历所有龙，计算它们的坐标
        for i, dragon in enumerate(dragons):
            if dragon == dragon1:
                positions[dragon] = pos1
            elif dragon == dragon2:
                positions[dragon] = pos2
            else:
                # 计算当前龙的 x 坐标，y 坐标与已知龙相同
                x = pos1[0] + (i - index1) * spacing_x
                positions[dragon] = (x, pos1[1])  # y 坐标与已知龙相同
        
        return positions

# 恐龙仓库
class DinosaurWarehouse(ImageProcessing):

    dinosaur_list = ["备注：", "返回", "创建恐龙", "恐龙仓库"] 

    def __init__(self):
        super().__init__("DinosaurWarehouse")

        self.switch_page("恐龙仓库")

        time.sleep(1)  # 等待页面加载完成

        self.dinosaur_dict = dict.fromkeys(self.dinosaur_list, (0, 0))

        self.ocr_data = self.get_ocr_result()


    
    def get_ocr_result(self):

        self.screenshot()
        self.grayscale()
        result = self.ocr_recognition()

        return result[0]
    
    def get_coordinate(self):
        '''
        从 OCR 识别结果中提取文本的中心坐标点
        :return: 返回一个字典，键为文本内容，值为中心坐标点 (x, y)
        '''
        for i in self.ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            # print(i)
            ocr_text = i[1][0] 
            ocr_text = ocr_text.replace(":", "：")  # 英文：替换为中文：

            if ocr_text.find("返回")==0:
                ocr_text = "返回"

            if ocr_text.find("备注")>=0:  # 如果文本内容不在 dinosaur_list 中，跳过当前结果

                print(ocr_text)
                print(i)

            if ocr_text not in self.dinosaur_list:  # 如果文本内容不在 dinosaur_list 中，跳过当前结果
                continue

            # similarity = i[1][1]  # 提取置信度

            # # 如果置信度低于 0.9，跳过当前结果
            # if similarity < 0.9:
            #     continue

            # 提取四个角的坐标点
            ocr_coordinates = i[0]

            # 计算中心坐标点
            x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
            y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标

            center_x = sum(x_coords) / 4  # 计算 x 中心点
            center_y = sum(y_coords) / 4  # 计算 y 中心点

            # 保存坐标点
            self.dinosaur_dict[ocr_text] = (center_x, center_y)

        print(f"坐标点获取成功: {self.dinosaur_dict}")

        return self.dinosaur_dict


    # 点击备注 并输入键盘
    def input_note(self, note):

        # 点击 "备注：" 按钮
        pyautogui.click(*self.dinosaur_dict["备注："])

        # 复制输入的备注
        pyperclip.copy(note)

        # 粘贴到输入框
        pyautogui.hotkey('ctrl', 'v')
        # # 输入备注
        # pyautogui.typewrite(note)

        time.sleep(1)  # 设置暂停时间为 1 秒

        # 截图并保存为note.png

        ocr_data = self.ocr_recognition_screenshot()

        print(f"OCR 识别结果: {ocr_data}")

        for i in ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            print(i)
            ocr_text = i[1][0]  # 提取文本内容

            if ocr_text == "取坐标":

                ocr_coordinates = i[0]

                # 计算中心坐标点
                x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
                y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标

                center_x = sum(x_coords) / 4  # 计算 x 中心点
                center_y = sum(y_coords) / 4  # 计算 y 中心点

                # 点击 "取坐标" 按钮
                pyautogui.click(center_x, center_y)
                # 点击 "取坐标" 按钮后，等待 1 秒
                time.sleep(1)  # 设置暂停时间为 1 秒
                # 点击返回按钮
                pyautogui.click(*self.dinosaur_dict["创建恐龙"])
                # 点击返回按钮后，等待 1 秒
        
                break


# 喝水
class DrinkWater(ImageProcessing):

    dinosaur_list = ["长按E键喝水"]

    def __init__(self):
        super().__init__("DrinkWater")

        self.dinosaur_dict = {}

    def press_esc_key(self):
        '''
        关闭状态面板
        模拟输入 esc 键
        '''
        # esc 键的虚拟键码
        VK_ESC = 0x1B

        # 按下 esc 键
        win32api.keybd_event(VK_ESC, 0, 0, 0)  # 按下
        time.sleep(0.05)  # 短暂停顿
        win32api.keybd_event(VK_ESC, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开

        time.sleep(1)

    # 连续输入S
    @staticmethod
    def input_s(times=5):
        for i in range(times):
            win32api.keybd_event(0x53, 0, 0, 0)  # 按下S
            time.sleep(0.1)  # 短暂停顿
            win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开S
            time.sleep(0.1)  # 短暂停顿

    # 清空屏幕
    def clear_screen(self):
        '''
        清空屏幕
        '''
        self.press_esc_key()  # 关闭状态面板

        ocr_data = self.ocr_recognition_screenshot()

        if ocr_data is None:

            return self.clear_screen()

        print(f"OCR 识别结果: {ocr_data}")

        for i in ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            print(i)
            ocr_text = i[1][0]  # 提取文本内容

            if ocr_text == "继续游戏":

                ocr_coordinates = i[0]

                # 计算中心坐标点
                x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
                y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标

                center_x = sum(x_coords) / 4  # 计算 x 中心点
                center_y = sum(y_coords) / 4  # 计算 y 中心点

                # 点击 "取坐标" 按钮
                pyautogui.click(center_x, center_y)
                # 点击 "取坐标" 按钮后，等待 1 秒
                time.sleep(1)  # 设置暂停时间为 1 秒


                break

    # 查看是否有喝水提示
    def check_water_tips(self):
        '''
        检查是否有喝水提示
        :return: 返回 True 表示有提示，False 表示没有提示
        '''
        ocr_data = self.ocr_recognition_screenshot()

        print(f"OCR 识别结果: {ocr_data}")

        for i in ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            print(i)
            ocr_text = i[1][0]  # 提取文本内容

            if ocr_text.find("长按") == 0: 

                return True
            
        else:

            return False
        
    
    # 查找喝水按钮并点击
    def find_and_click_water_button(self):
        '''
        查找喝水按钮并点击
        :return: 返回 True 表示找到并点击成功，False 表示未找到或点击失败
        '''
        # 查找喝水按钮
        if self.check_water_tips():

            # 点击喝水按钮
            self.double_press_e()
            return True

        for i in range(5):
            # 连续输入 S 键
            self.input_s()
            # 等待 1 秒
            time.sleep(1)
            # 再次检查是否有喝水提示
            if self.check_water_tips():
                # 找到并点击喝水按钮
                self.double_press_e()
                return True
            
        else:

            return False



    # 下拉鼠标 双击e键喝水
    @staticmethod
    def pull_mouse(distance=1000, duration=1):
        '''
        下拉鼠标
        :param distance: 下拉的距离（像素）
        :param duration: 下拉的持续时间（秒）
        '''
        # 计算移动步长
        steps = int(distance / 10)  # 每次移动 10 像素
        delay = duration / steps  # 每次移动的延迟

        # 按下鼠标左键
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        time.sleep(0.1)  # 短暂停顿，确保鼠标按下

        # 向下移动鼠标
        for _ in range(steps):
            win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 0, 10, 0, 0)  # 每次移动 10 像素
            time.sleep(delay)

        # 松开鼠标左键
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    @staticmethod
    def double_press_e():
        '''
        模拟双击 E 键
        '''
        # E 键的虚拟键码
        VK_E = 0x45

        # 第一次按下 E 键
        win32api.keybd_event(VK_E, 0, 0, 0)  # 按下
        time.sleep(0.05)  # 短暂停顿
        win32api.keybd_event(VK_E, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开

        # 短暂停顿，模拟双击间隔
        time.sleep(0.1)

        # 第二次按下 E 键
        win32api.keybd_event(VK_E, 0, 0, 0)  # 按下
        time.sleep(0.05)  # 短暂停顿
        win32api.keybd_event(VK_E, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开



# 状态检测
class DinosaurStatus(ImageProcessing):



    def __init__(self):
        super().__init__("DinosaurStatus")

        self.dinosaur_dict = {}

        self.c_press_times = 0  # c 键按下次数

        self.dinosaur_status = {
            "玩家": "",
            "成长": "",
            "补胃": (0, 0),
            "胃": "",
            "经验": "",
            "水": "",
            "饮水状态": True
        }

        # self.press_c_key() # 打开状态面板

    # 打开 关闭 状态面板
    def press_c_key(self): 

        '''
        打开状态面板
        模拟输入 c 键
        '''
        # c 键的虚拟键码
        VK_C = 0x43

        # 按下 c 键
        win32api.keybd_event(VK_C, 0, 0, 0)  # 按下
        time.sleep(0.05)  # 短暂停顿
        win32api.keybd_event(VK_C, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开

        self.c_press_times += 1  # 记录 c 键按下次数

        # 等待 1 秒，等待状态面板打开
        time.sleep(1)

    def press_esc_key(self):
        '''
        关闭状态面板
        模拟输入 esc 键
        '''
        # esc 键的虚拟键码
        VK_ESC = 0x1B

        # 按下 esc 键
        win32api.keybd_event(VK_ESC, 0, 0, 0)  # 按下
        time.sleep(0.05)  # 短暂停顿
        win32api.keybd_event(VK_ESC, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开

        # 等待 1 秒，等待状态面板关闭
        time.sleep(1)

    def get_ocr_result(self):
        '''
        获取恐龙状态
        :return: 返回一个字典，键为恐龙名称，值为状态（字符串）
        '''

        if self.c_press_times > 4:

            raise Exception("状态面板打开多次，未能正确获取恐龙状态")
        
        ocr_data = self.ocr_recognition_screenshot()    

        print(f"OCR 识别结果: {ocr_data}")

        if ocr_data is None:

            return self.get_ocr_result()

        for i in ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            print(i)
            ocr_text = i[1][0]  # 提取文本内容
            if ocr_text.find("玩家")==0:

                self.c_press_times = 0  # 重置 c 键按下次数

                print(f"-----ocr_data会返回None: {ocr_data}")
                
                return ocr_data
            
            if ocr_text.find("性别")==0:

                self.c_press_times = 0  # 重置 c 键按下次数

                print(f"-----ocr_data会返回None: {ocr_data}")
                
                return ocr_data
        else:

            self.press_c_key()

            return self.get_ocr_result()

    def get_dinosaur_status(self):
        '''
        获取恐龙状态 
        self.dinosaur_status = {
            "玩家": "",
            "成长": "",
            "补胃": (0, 0),
            "胃": "",
            "经验": "",
            "水": ""
            "饮水状态": false
        }

        '''

        ocr_data = self.get_ocr_result()

        print(f"***********这里的ocr有时返回None：{ocr_data}")

        for i in ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            print(i)
            ocr_text = i[1][0]  # 提取文本内容

            ocr_text = ocr_text.replace(":", "：")  # 英文：替换为中文：
            if ocr_text.find("玩家：")==0:
                self.dinosaur_status["玩家"] = ocr_text.replace("玩家：", "")
            elif ocr_text.find("成长：")==0:
                self.dinosaur_status["成长"] = ocr_text.replace("成长：", "")
            elif ocr_text.find("补胃")==0:

                ocr_coordinates = i[0]
                # 计算中心坐标点
                x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
                y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标

                center_x = sum(x_coords) / 4  # 计算 x 中心点
                center_y = sum(y_coords) / 4  # 计算 y 中心点

                self.dinosaur_status["补胃"] = (center_x, center_y)

            elif ocr_text.find("胃：")==0:
                self.dinosaur_status["胃"] = ocr_text.replace("胃：", "")

                print(f"胃的坐标点: {self.dinosaur_status['胃']}")

                if self.dinosaur_status["胃"].split("/")[0].isdigit():

                    if int(self.dinosaur_status["胃"].split("/")[0]) <= 25:
                        # 补胃 点击 补胃按钮
                        if self.dinosaur_status["补胃"]!= (0, 0):
                            # 补胃 点击 补胃按钮
                            self.feed_dinosaur()

            elif ocr_text.find("经验：")==0:
                self.is_drinking(int(ocr_text.replace("经验：", "").split("/")[0]))
                self.dinosaur_status["经验"] = ocr_text.replace("经验：", "")
            elif ocr_text.find("水：")==0:
                self.dinosaur_status["水"] = ocr_text.replace("水：", "")

        print(f"恐龙状态获取成功: {self.dinosaur_status}")

        return self.dinosaur_status
    
    # 补胃
    def feed_dinosaur(self):
        '''
        补胃
        '''
        # 点击 "补胃" 按钮
        pyautogui.click(*self.dinosaur_status["补胃"])
        # 点击 "补胃" 按钮后，等待 1 秒
        time.sleep(1)  # 设置暂停时间为 1 秒

        # 点击 "确认" 按钮

        ocr_data = self.ocr_recognition_screenshot()

        print(f"OCR 识别结果: {ocr_data}")

        for i in ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            print(i)
            ocr_text = i[1][0]  # 提取文本内容
            if ocr_text.find("是")==0:
                ocr_coordinates = i[0]
                # 计算中心坐标点
                x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
                y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标
                center_x = sum(x_coords) / 4  # 计算 x 中心点
                center_y = sum(y_coords) / 4  # 计算 y 中心点
                # 点击 "确认" 按钮
                pyautogui.click(center_x, center_y)

    # 判断是否饮水
    def is_drinking(self, now_value):
        ''' 主要是判断经验是否增加 而不是判断水量是否增加 '''

        print(f"**********之前的经验: {self.dinosaur_status['经验']}")

        print(f"**********现在的经验: {now_value}")

        if self.dinosaur_status["经验"]=="":

            return True
        
        elif int(self.dinosaur_status["经验"].split("/")[0]) < now_value:

            print(f"**********经验增加: {self.dinosaur_status['经验']}")

            self.dinosaur_status["饮水状态"] = True
            return True

        elif int(self.dinosaur_status["经验"].split("/")[0]) >= now_value:

            

            print(f"********************经验没有增加: {self.dinosaur_status['经验']}")

            self.dinosaur_status["饮水状态"] = False
            return False
        else:
            return True


    
# 存龙
class DepositDinosaur(ImageProcessing):

    dinosaur_list = ["存储恐龙"]
    def __init__(self):
        super().__init__("DepositDinosaur")

        self.esc_press_times = 0  # esc 键按下次数

        self.b_page_times = 0  # b 键翻页次数

        self.dinosaur_dict = {
            "存储恐龙": (0, 0),
            "存储并退出": (0, 0),
            "备注": (0, 0)
        }

    def press_esc_key(self):
        '''
        关闭状态面板
        模拟输入 esc 键
        '''
        # esc 键的虚拟键码
        VK_ESC = 0x1B

        # 按下 esc 键
        win32api.keybd_event(VK_ESC, 0, 0, 0)  # 按下
        time.sleep(0.05)  # 短暂停顿
        win32api.keybd_event(VK_ESC, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开

        # 等待 1 秒，等待状态面板关闭

        self.esc_press_times += 1  # 记录 esc 键按下次数
        time.sleep(1)

    def get_coordinate_a_page(self):

        if self.esc_press_times > 4:

            raise Exception("状态面板打开多次，未能正确获取坐标点")
        
        ocr_data = self.ocr_recognition_screenshot()

        print(f"OCR 识别结果: {ocr_data}")

        for i in ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            print(i)
            ocr_text = i[1][0]  # 提取文本内容
            if ocr_text.find("存储恐龙")==0:
                ocr_coordinates = i[0]
                # 计算中心坐标点
                x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
                y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标

                center_x = sum(x_coords) / 4  # 计算 x 中心点
                center_y = sum(y_coords) / 4  # 计算 y 中心点

                self.dinosaur_dict["存储恐龙"] = (center_x, center_y)

                # 点击
                pyautogui.click(*self.dinosaur_dict["存储恐龙"])

                self.esc_press_times = 0  # 重置 esc 键按下次数

                return self.dinosaur_dict

        else:
            # 点击一下屏幕
            pyautogui.click()
            time.sleep(0.5)
            self.press_esc_key()
            return self.get_coordinate_a_page()

    
    def get_coordinate_b_page(self, note, save_note):
        '''存储界面'''

        if self.b_page_times > 4:
            raise Exception("翻页次数过多，未能正确获取坐标点")
        
        print("~~~~~~~~~~~~~~~~~```点击 存储并退出")
        ocr_data = self.ocr_recognition_screenshot()

        print(f"~~~~~~~~~~~~~~~~~~OCR 识别结果: {ocr_data}")

        for i in ocr_data:
            '''
            i 的格式示例：
            [[[1613.0, 1045.0], [1763.0, 1045.0], [1763.0, 1089.0], [1613.0, 1089.0]], ('开始游戏', 0.9998767971992493)]
            '''
            print(i)
            ocr_text = i[1][0].lower()  # 提取文本内容 并转为小写
            if ocr_text.find("存储并退出")==0:
                ocr_coordinates = i[0]
                # 计算中心坐标点
                x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
                y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标
                center_x = sum(x_coords) / 4  # 计算 x 中心点
                center_y = sum(y_coords) / 4  # 计算 y 中心点
                self.dinosaur_dict["存储并退出"] = (center_x, center_y)

            if ocr_text == note.lower() or ocr_text == save_note.lower():

                ocr_coordinates = i[0]
                # 计算坐标点以最右侧为准
                x_coords = [point[0] for point in ocr_coordinates]  # 提取所有 x 坐标
                y_coords = [point[1] for point in ocr_coordinates]  # 提取所有 y 坐标
                center_x = sum(x_coords) / 4  # 计算 x 中心点
                center_y = sum(y_coords) / 4  # 计算 y 中心点
                self.dinosaur_dict["备注"] = (center_x, center_y)

                
        print(f"坐标点: {self.dinosaur_dict}")

        if self.dinosaur_dict["存储并退出"] == (0, 0) or self.dinosaur_dict["备注"] == (0, 0):

            self.b_page_times += 1  # 记录 b 键翻页次数

            return self.get_coordinate_b_page(note, save_note)
                
        print(f"备注坐标: {self.dinosaur_dict['备注']}")
                
        self.input_note(save_note, self.dinosaur_dict["备注"])

        self.b_page_times = 0  # 重置 b 键翻页次数
        print("等待 存龙倒计时 30 秒")
        
        # 点击 存储并退出
        time.sleep(30)

        pyautogui.click(*self.dinosaur_dict["存储并退出"])




    # 输入备注
    def input_note(self, note, coordinate):
        '''
        输入备注
        :param note: 备注内容
        :param coordinate: 坐标点
        '''
        # 将备注内容复制到剪贴板
        pyperclip.copy(note)

        # 点击备注输入框
        pyautogui.click(*coordinate)

        # 删除原有内容
        pyautogui.hotkey("ctrl", "a")
        pyautogui.hotkey("delete")

        # 粘贴备注内容
        pyautogui.hotkey("ctrl", "v")



            

if __name__ == '__main__':
    import time
    import pyautogui
    import pygetwindow as gw

    def activate_window(window_title):
        '''
        激活指定标题的窗口
        :param window_title: 窗口标题（完整或部分匹配）
        '''
        try:
            # 查找窗口
            window = gw.getWindowsWithTitle(window_title)[0]  # 获取第一个匹配的窗口
            if window:
                # 激活窗口
                window.activate()
                print(f"已激活窗口: {window_title}")
            else:
                print(f"未找到窗口: {window_title}")
        except Exception as e:
            print(f"激活窗口时出错: {e}")

    # 激活名为 "恐龙岛" 的窗口
    activate_window("恐龙岛")

    time.sleep(2)  # 设置暂停时间为 2 秒

    # 进入 存龙 界面
    d = DepositDinosaur()

    # 点击 "存储恐龙" 按钮
    d.get_coordinate_a_page()

    time.sleep(2)  # 设置暂停时间为 2 秒

    # 点击 "存储并退出" 按钮
    d.get_coordinate_b_page("abcok", "OK")





    




    


    # d = DinosaurWarehouse()

    # print(d.ocr_data)

    # d.get_coordinate()

    # d.input_note("abc")

    # d = CreateDinosaur().get_coordinate()

    # # 点击 "创建恐龙" 按钮
    # pyautogui.click(*d["创建恐龙"])

    # # 点击 "食肉龙" 按钮
    # pyautogui.click(*d["食草恐龙"])

    # # 点击 "三角龙" 按钮
    # pyautogui.click(*d["三角龙"])


        
    





